/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.tri.gui.ListadosWorkers;

import java.util.Date;
import javax.swing.table.AbstractTableModel;
import org.tri.entity.Establecimiento;
import org.tri.entity.Productor;
import org.tri.gui.worker.TableFillListener;
import org.tri.gui.worker.TransaccionFillWorker;
import org.tri.gui.worker.retrievers.MultipleBusquedaDataRetriever;
import org.tri.model.TransaccionTableModel;
import org.tri.persistence.search.BusquedaCompra;
import org.tri.persistence.search.BusquedaCompraHistorica;
import org.tri.persistence.search.BusquedaVenta;
import org.tri.persistence.search.BusquedaVentaHistorica;

/**
 *
 * @author giaco
 */
public class ExistenciasListadosWorker extends AbstractListadosWorker {

    public ExistenciasListadosWorker() {
        //inicializamos el modelo de tabla
        modelo = new TransaccionTableModel();

    }//end constructor ExistenciasListadosWorker

    @Override
    public AbstractTableModel execute( Establecimiento establecimiento, Date fechaInicio,
                                       Date fechaFin,
                                       TableFillListener listener ) {
        //inicializo las busquedas
        BusquedaVenta venta = new BusquedaVenta();
        BusquedaVentaHistorica ventaHistorica = new BusquedaVentaHistorica();
        BusquedaCompra compra = new BusquedaCompra();
        BusquedaCompraHistorica compraHistorica = new BusquedaCompraHistorica();

        //agrego los criterios de busqueda
        venta.porFechaEnRango( fechaInicio, fechaFin );
        ventaHistorica.porFechaEnRango( fechaInicio, fechaFin );
        compra.porFechaEnRango( fechaInicio, fechaFin );
        compraHistorica.porFechaEnRango( fechaInicio, fechaFin );
        venta.porEstablecimiento( establecimiento );
        ventaHistorica.porEstablecimiento( establecimiento );
        compra.porEstablecimiento( establecimiento );
        compraHistorica.porEstablecimiento( establecimiento );

        //agrego las busquedas al data retriever
        MultipleBusquedaDataRetriever busqueda =
                                      new MultipleBusquedaDataRetriever(
                venta, ventaHistorica, compra, compraHistorica );

        //realizo la busqueda en un Thread aparte
        TransaccionFillWorker worker = new TransaccionFillWorker( (TransaccionTableModel)modelo, busqueda );

        worker.addTransaccionFillListener( listener );

        worker.execute();

        return modelo;

    }//end metodo execute

    @Override
    public AbstractTableModel execute( Productor productor, Date fechaInicio,
                                       Date fechaFin,
                                       TableFillListener listener ) {
        //inicializo las busquedas
        BusquedaVenta venta = new BusquedaVenta();
        BusquedaVentaHistorica ventaHistorica = new BusquedaVentaHistorica();
        BusquedaCompra compra = new BusquedaCompra();
        BusquedaCompraHistorica compraHistorica = new BusquedaCompraHistorica();

        //agrego los criterios de busqueda
        venta.porFechaEnRango( fechaInicio, fechaFin );
        ventaHistorica.porFechaEnRango( fechaInicio, fechaFin );
        compra.porFechaEnRango( fechaInicio, fechaFin );
        compraHistorica.porFechaEnRango( fechaInicio, fechaFin );
        venta.porProductor( productor );
        ventaHistorica.porProductor( productor );
        compra.porProductor( productor );
        compraHistorica.porProductor( productor );

        //agrego las busquedas al data retriever
        MultipleBusquedaDataRetriever busqueda = new MultipleBusquedaDataRetriever( venta, ventaHistorica, compra, compraHistorica );

        //realizo la busqueda en un Thread aparte
        TransaccionFillWorker worker = new TransaccionFillWorker( (TransaccionTableModel)modelo, busqueda );

        worker.addTransaccionFillListener( listener );

        worker.execute();

        return modelo;

    }//end metodo execute

    @Override
    public String toString() {
        return "Existencias";
    }

}
